//
//  VIPAgoraConfig.h
//  SSCodingOsx
//
//  Created by Taurin on 12/24/20.
//  Copyright © 2020 韩笑. All rights reserved.
//

#import <AgoraRtcEngineKit/AgoraRtcEngineKit.h>

#import "VIPRTCAgoraModel.h"
#import "VIPPath.h"
#import "VIPWrite.h"

#ifndef VIPAgoraConfig_h
#define VIPAgoraConfig_h

/** 音量提示, 单位: 毫秒.
 * <=0: 禁用音量提示功能
 * 最小不得少于 10 毫秒, 建议大于 200 毫秒.
 */
#define kAgoraAudioVolumeIndication 100

/** 音量提示的灵敏度
 * 取值范围为 [0,10], 建议值为 3
 * 数字越大, 波动越灵敏
 * 数字越小, 波动越平滑
 */
#define kAgoraAudioVolumeSmooth 3

/** 视图显示模式
 * AgoraVideoRenderModeHidden:
 优先保证视窗被填满. 视频尺寸等比缩放, 直至整个视窗被视频填满.
 如果视频长宽与显示窗口不同, 则视频流会按照显示视窗的比例进行周边裁剪或图像拉伸后填满视窗.
 
 * AgoraVideoRenderModeFit:
 优先保证视频内容全部显示. 视频尺寸等比缩放, 直至视频窗口的一边与视窗边框对齐.
 如果视频尺寸与显示视窗尺寸不一致, 在保持长宽比的前提下, 将视频进行缩放后填满视窗, 缩放后的视频四周会有一圈黑边.
 
 * AgoraVideoRenderModeAdaptive:
 该模式已废弃, 不推荐使用
 
 * AgoraVideoRenderModeFill:
 视频尺寸进行缩放和拉伸以充满显示视窗.
 */
#define kAgoraVideoRenderMode AgoraVideoRenderModeFit

/** 视频属性枚举值
 * 分辨率 424 * 240
 * 帧率   15 fps
 * 码率   220 Kbps
 */
#define kAgoraVideoProfile AgoraVideoProfileLandscape240P_4

/** 播放远端音量, 取值范围为[0,400].
 *   0: 静音
 * 100: 原始音量
 * 400: 最大可为原始音量的 4 倍(自带溢出保护)
 为避免回声并提升通话质量，Agora 建议将 volume 值设为 [0,100]。如果 volume 值需超过 100，联系技术支持。
 */
#define kAgoraAudioPlaybackSignalVolume 350

/** 音频采集音量, 取值范围为[0,400].
 *   0: 静音
 * 100: 原始音量
 * 400: 最大可为原始音量的 4 倍(自带溢出保护)
 为避免回声并提升通话质量，Agora 建议将 volume 值设为 [0,100]。如果 volume 值需超过 100，联系技术支持。
 */
#define kAgoraAudioRecordingSignalVolume 100

/** 音频属性
 * AgoraAudioProfileDefault 默认设置。
 通信场景下: 32 KHz 采样率, 语音编码, 单声道, 编码码率最大值为 18 Kbps.
 直播场景下: 48 KHz 采样率, 音乐编码, 单声道, 编码码率最大值为 64 Kbps.
 
 * AgoraAudioProfileSpeechStandard
 指定 32 KHz采样率, 语音编码, 单声道, 编码码率最大值为 18 Kbps.
 
 * AgoraAudioProfileMusicStandard
 指定 48 KHz采样率, 音乐编码, 单声道, 编码码率最大值为 64 Kbps.
 
 * AgoraAudioProfileMusicStandardStereo
 指定 48 KHz采样率, 音乐编码, 双声道, 编码码率最大值为 80 Kbps.
 
 * AgoraAudioProfileMusicHighQuality
 指定 48 KHz采样率, 音乐编码, 单声道, 编码码率最大值为 96 Kbps.
 
 * AgoraAudioProfileMusicHighQualityStereo
 指定 48 KHz采样率, 音乐编码, 双声道, 编码码率最大值为 128 Kbps.
 */
#define kAgoraAudioProfile AgoraAudioProfileMusicHighQuality

/** 音频应用场景
 * AgoraAudioScenarioDefault 默认的音频应用场景。
 
 * AgoraAudioScenarioChatRoomEntertainment
 娱乐场景，适用于用户需要频繁上下麦的场景.
 
 * AgoraAudioScenarioEducation
 教育场景，适用于需要高流畅度和稳定性的场景.
 
 * AgoraAudioScenarioGameStreaming
 高音质语聊房场景，适用于音乐为主的场景.
 
 * AgoraAudioScenarioShowRoom
 秀场场景，适用于需要高音质的单主播场景.
 
 * AgoraAudioScenarioChatRoomGaming
 游戏开黑场景，适用于只有人声的场景.
 
 * AgoraAudioScenarioMeeting
 会议场景，适用于人声为主的多人会议.
 */
#define kAgoraAudioScenario AgoraAudioScenarioEducation

/** 日志输出等级
 * AgoraLogFilterOff
 不输出日志信息
 
 * AgoraLogFilterDebug
 输出所有 API 日志信息。如果你想获取最完整的日志，可以将日志级别设为该等级。
 
 * AgoraLogFilterInfo
 输出 CRITICAL、ERROR、WARNING 和 INFO 级别的日志信息。我们推荐你将日志级别设为该等级。
 
 * AgoraLogFilterWarning
 输出 CRITICAL、ERROR 和 WARNING 级别的日志信息
 
 * AgoraLogFilterError
 输出 CRITICAL 和 ERROR 级别的日志信息
 
 * AgoraLogFilterCritical
 输出 CRITICAL 级别的日志信息
 */
#define kAgoraLogFilter AgoraLogFilterInfo

/** 用户角色
 * AgoraClientRoleBroadcaster(1)
 直播频道中的主播，可以发布和接收音视频流
 
 * AgoraClientRoleAudience(2):
 (默认)直播频道中的观众，只可以接收音视频流
 */
#define kAgoraClientRole AgoraClientRoleBroadcaster

/** 频道的使用场景
 * AgoraChannelProfileCommunication
 (默认)通信场景.
 该场景下，频道内所有用户都可以发布和接收音, 视频流.
 适用于语音通话, 视频群聊等应用场景.
 
 * AgoraChannelProfileLiveBroadcasting
 直播场景
 该场景有主播和观众两种用户角色, 可以通过 setClientRole 设置. 主播可以发布和接收音视频流, 观众直接接收流.
 适用于语聊房, 视频直播, 互动大班课等应用场景.
 
 * AgoraChannelProfileGame
 Agora 不推荐使用.
 */
#define kAgoraChannelProfile AgoraChannelProfileLiveBroadcasting

// 声网日志路径
#define kAgoraLogPath [VIPPath agoraLogPath]

// 小流参数配置
#define kParametersLowConfig @"{\"che.video.lowBitRateStreamParameter\":{\"width\":320,\"height\":180,\"frameRate\":20,\"bitRate\":140}}"

// 默认远端接收小流
#define kRemoteDefaultStreamType AgoraVideoStreamTypeLow

#define kScreenCaptureFreq 15

#define WS(weakSelf)  __weak __typeof(&*self)weakSelf = self;

#endif /* VIPAgoraConfig_h */
